#ifndef __MPU6050_REG_H
#define __MPU6050_REG_H

/**
 * @file    MPU6050_REG.h
 * @brief   MPU6050传感器寄存器地址定义
 * @details 包含MPU6050所有寄存器的地址宏定义，按功能分类便于查阅
 *          MPU6050是一款6轴运动处理传感器，集成3轴加速度计和3轴陀螺仪
 */

/* 自检寄存器 --------------------------------------------------------------*/
#define SELF_TEST_X				0x0D  // X轴陀螺仪自检寄存器
#define SELF_TEST_Y				0x0E  // Y轴陀螺仪自检寄存器
#define SELF_TEST_Z				0x0F  // Z轴陀螺仪自检寄存器
#define SELF_TEST_A				0x10  // 加速度计自检寄存器（X/Y/Z共用）
// 功能：用于传感器自检，写入特定值可测试硬件是否正常
// 典型值：默认0x00，自检时按 datasheet 写入对应值

/* 采样率配置寄存器 ----------------------------------------------------------*/
#define SMPLRT_DIV				0x19  // 采样率分频寄存器
// 功能：控制传感器输出数据的采样率
// 计算公式：采样率 = 陀螺仪输出率 / (1 + SMPLRT_DIV)
// 说明：陀螺仪默认输出率为1kHz（当DLPF使能时）或8kHz（当DLPF禁用时）

/* 配置寄存器 --------------------------------------------------------------*/
#define CONFIG					0x1A  // 配置寄存器（主要用于DLPF设置）
// 功能：配置数字低通滤波器（DLPF）参数，同时影响加速度计和陀螺仪
// 位[2:0]：DLPF_CFG，设置滤波截止频率，范围5Hz~256Hz（不同模式对应不同频率）

/* 陀螺仪配置寄存器 ----------------------------------------------------------*/
#define GYRO_CONFIG				0x1B  // 陀螺仪配置寄存器
// 功能：配置陀螺仪量程和自检模式
// 位[4:3]：FS_SEL（满量程选择）
//   00 → ±250°/s（默认），01 → ±500°/s
//   10 → ±1000°/s，11 → ±2000°/s
// 位[7:5]：用于陀螺仪自检，默认0x00

/* 加速度计配置寄存器 --------------------------------------------------------*/
#define ACCEL_CONFIG			0x1C  // 加速度计配置寄存器
// 功能：配置加速度计量程和自检模式
// 位[4:3]：AFS_SEL（满量程选择）
//   00 → ±2g（默认），01 → ±4g
//   10 → ±8g，11 → ±16g
// 位[7:5]：用于加速度计自检，默认0x00

/* 运动检测寄存器 ------------------------------------------------------------*/
#define MOT_THR					0x1F  // 运动检测阈值寄存器
// 功能：设置运动检测的加速度阈值
// 单位：LSB/g（与加速度计量程相关，如±2g量程时1LSB=16384LSB/g）

/* FIFO使能寄存器 ------------------------------------------------------------*/
#define FIFO_EN					0x23  // FIFO使能寄存器
// 功能：控制哪些传感器数据写入FIFO缓冲区
// 位[7:0]：对应不同传感器（如加速度计、陀螺仪、温度等），置1使能写入FIFO

/* I2C主机控制寄存器 --------------------------------------------------------*/
#define I2C_MST_CTRL			0x24  // I2C主机控制寄存器
// 功能：配置MPU6050作为I2C主机时的通信参数（如时钟频率）
// 位[2:0]：I2C_MST_CLK，设置I2C主机时钟频率（100kHz~400kHz）

/* I2C从机0配置寄存器 --------------------------------------------------------*/
#define I2C_SLV0_ADDR			0x25  // 从机0地址寄存器（7位地址）
#define I2C_SLV0_REG			0x26  // 从机0寄存器地址（要读取的寄存器）
#define I2C_SLV0_CTRL			0x27  // 从机0控制寄存器（读写使能、数据长度等）

/* I2C从机1配置寄存器 --------------------------------------------------------*/
#define I2C_SLV1_ADDR			0x28  // 从机1地址寄存器
#define I2C_SLV1_REG			0x29  // 从机1寄存器地址
#define I2C_SLV1_CTRL			0x2A  // 从机1控制寄存器

/* I2C从机2配置寄存器 --------------------------------------------------------*/
#define I2C_SLV2_ADDR			0x2B  // 从机2地址寄存器
#define I2C_SLV2_REG			0x2C  // 从机2寄存器地址
#define I2C_SLV2_CTRL 			0x2D  // 从机2控制寄存器

/* I2C从机3配置寄存器 --------------------------------------------------------*/
#define I2C_SLV3_ADDR			0x2E  // 从机3地址寄存器
#define I2C_SLV3_REG			0x2F  // 从机3寄存器地址
#define I2C_SLV3_CTRL			0x30  // 从机3控制寄存器

/* I2C从机4配置寄存器 --------------------------------------------------------*/
#define I2C_SLV4_ADDR			0x31  // 从机4地址寄存器
#define I2C_SLV4_REG			0x32  // 从机4寄存器地址
#define I2C_SLV4_DO				0x33  // 从机4写入数据寄存器
#define I2C_SLV4_CTRL			0x34  // 从机4控制寄存器
#define I2C_SLV4_DI				0x35  // 从机4读取数据寄存器

/* I2C主机状态寄存器 --------------------------------------------------------*/
#define I2C_MST_STATUS			0x36  // I2C主机状态寄存器
// 功能：存储I2C主机通信的状态（如传输完成、错误等）

/* 中断配置寄存器 ------------------------------------------------------------*/
#define INT_PIN_CFG				0x37  // 中断引脚配置寄存器
// 功能：配置中断引脚（INT）的电气特性（如电平触发、是否开漏等）
#define INT_ENABLE				0x38  // 中断使能寄存器
// 功能：使能特定中断源（如数据就绪、运动检测、FIFO溢出等）
#define INT_STATUS				0x3A  // 中断状态寄存器
// 功能：指示当前触发的中断类型（读此寄存器可清除中断标志）

/* 加速度计数据寄存器 --------------------------------------------------------*/
#define ACCEL_XOUT_H			0x3B  // X轴加速度高8位
#define ACCEL_XOUT_L			0x3C  // X轴加速度低8位
#define ACCEL_YOUT_H			0x3D  // Y轴加速度高8位
#define ACCEL_YOUT_L			0x3E  // Y轴加速度低8位
#define ACCEL_ZOUT_H			0x3F  // Z轴加速度高8位
#define ACCEL_ZOUT_L			0x40  // Z轴加速度低8位
// 说明：
// 1. 加速度计数据为16位有符号整数（高8位+低8位）
// 2. 数据范围与ACCEL_CONFIG的AFS_SEL相关（如±2g时，量程-32768~32767对应-2g~+2g）

/* 温度传感器数据寄存器 ------------------------------------------------------*/
#define TEMP_OUT_H				0x41  // 温度数据高8位
#define TEMP_OUT_L				0x42  // 温度数据低8位
// 说明：
// 1. 温度数据为16位有符号整数，精度32.5°C/LSB
// 2. 计算公式：温度(°C) = (TEMP_OUT + 12412) / 340

/* 陀螺仪数据寄存器 ----------------------------------------------------------*/
#define GYRO_XOUT_H				0x43  // X轴陀螺仪高8位
#define GYRO_XOUT_L				0x44  // X轴陀螺仪低8位
#define GYRO_YOUT_H				0x45  // Y轴陀螺仪高8位
#define GYRO_YOUT_L				0x46  // Y轴陀螺仪低8位
#define GYRO_ZOUT_H				0x47  // Z轴陀螺仪高8位
#define GYRO_ZOUT_L				0x48  // Z轴陀螺仪低8位
// 说明：
// 1. 陀螺仪数据为16位有符号整数（高8位+低8位）
// 2. 数据范围与GYRO_CONFIG的FS_SEL相关（如±250°/s时，量程-32768~32767对应-250°/s~+250°/s）

/* 外部传感器数据寄存器 ------------------------------------------------------*/
#define EXT_SENS_DATA_00		0x49  // 外部传感器数据00
#define EXT_SENS_DATA_01		0x4A  // 外部传感器数据01
// ...（中间省略EXT_SENS_DATA_02至EXT_SENS_DATA_22）
#define EXT_SENS_DATA_23		0x60  // 外部传感器数据23
// 功能：存储通过I2C主机接口读取的外部传感器数据（如磁力计）
// 说明：共24个寄存器，对应从机0~3读取的数据

/* I2C从机数据输出寄存器 ----------------------------------------------------*/
#define I2C_SLV0_DO				0x63  // 从机0输出数据寄存器
#define I2C_SLV1_DO				0x64  // 从机1输出数据寄存器
#define I2C_SLV2_DO				0x65  // 从机2输出数据寄存器
#define I2C_SLV3_DO				0x66  // 从机3输出数据寄存器
// 功能：存储写入到对应从机的数据

/* I2C主机延迟控制寄存器 ----------------------------------------------------*/
#define I2C_MST_DELAY_CTRL		0x67  // I2C主机延迟控制寄存器
// 功能：配置I2C主机传输之间的延迟时间

/* 信号路径复位寄存器 --------------------------------------------------------*/
#define SIGNAL_PATH_RESET		0x68  // 信号路径复位寄存器
// 功能：复位传感器的信号处理路径（加速度计、陀螺仪、温度传感器）
// 位[2:0]：分别对应温度、陀螺仪、加速度计的复位（置1复位，自动清零）

/* 运动控制寄存器 ------------------------------------------------------------*/
#define MOT_CON					0x69  // 运动控制寄存器
// 功能：配置运动检测的参数（如检测模式、灵敏度等）

/* 用户控制寄存器 ------------------------------------------------------------*/
#define USER_CTRL				0x6A  // 用户控制寄存器
// 功能：控制FIFO、I2C主机、SPI模式等
// 位[6]：FIFO_EN（FIFO使能），位[5]：I2C_MST_EN（I2C主机使能）

/* 电源管理寄存器 ------------------------------------------------------------*/
#define PWR_MGMT_1				0x6B  // 电源管理1寄存器（核心电源控制）
// 功能：配置电源模式、时钟源选择
// 位[7]：DEVICE_RESET（设备复位，置1复位所有寄存器）
// 位[6]：SLEEP（睡眠模式，置1进入低功耗模式）
// 位[2:0]：CLKSEL（时钟源选择，推荐选3（陀螺仪X轴）或0（内部8MHz））
#define PWR_MGMT_2				0x6C  // 电源管理2寄存器
// 功能：控制各轴的待机模式（可单独关闭加速度计或陀螺仪的某个轴）

/* FIFO缓冲区控制寄存器 ------------------------------------------------------*/
#define FIFO_COUNTH				0x72  // FIFO计数高8位
#define FIFO_COUNTL				0x73  // FIFO计数低8位
// 功能：指示FIFO缓冲区中当前数据的字节数（16位值）
#define FIFO_R_W				0x74  // FIFO读写寄存器
// 功能：读取FIFO数据（读此寄存器时，FIFO指针自动递增）

/* 设备ID寄存器 --------------------------------------------------------------*/
#define WHO_AM_I				0x75  // 设备ID寄存器
// 功能：存储MPU6050的默认ID，用于识别设备
// 默认值：0x68（二进制1101000），可通过外部引脚AD0修改最低位（接高电平为0x69）

#endif /* __MPU6050_REG_H */
